package com.pzsh.service;

import com.alibaba.fastjson.JSONObject;
import com.pzsh.entity.UserEntity;
import com.pzsh.entity.vo.*;
import com.pzsh.util.PageResult;

import java.util.List;

/**
 * @Description: 用户相关服务
 * @Param:
 * @return:
 * @Author: gxl
 * @Date: 2019/12/05
 */
public interface IUserService {


    /**
     * 发送验证码- 用于用户注册
     * @param mobile
     */
    void sendVerificationCodeForRegister(String mobile);

    /**
     * 发送验证码-用于修改密码
     * @param account
     */
    void sendVerificationCodeForChangePassword(String account);

    /**
     * 校验修改密码时的短信验证码
     * @param code
     * @param account
     */
    void checkVerificationCodeOfChangePassword( String account, String code);

    /**
     * 用户登录
     * @param account
     * @param password
     * @return
     * @throws Exception
     */
    UserVo userLogin(String account, String password);

    /**
     * 用户注册
     * @param account
     * @param mobile
     * @param code
     * @param pass
     * @param visitAccount
     */
    void registry(String account, String mobile, String code, String pass, String visitAccount);

    /**
     * 获取用户信息
     * @return
     * @throws Exception
     */
    UserVo getUser(String account);

    /**
     * 更新登录密码
     * @param account
     * @param password
     */
    void updatePassWord(String account, String password);


    /**
     * 更新登录密码2
     * @param account
     * @param password
     * @param vcode
     */
    void updatePassWord2(String account, String password,String vcode);

    /**
     * 用户实名认证
     * @param realName
     * @param idCard
     * @param bankCard
     * @param bankMobile
     */
    void userAuth(String account, String realName, String idCard, String bankCard, String bankMobile);

    /**
     * 用户退出
     * @param account
     * @return
     */
    void loginOut(String account);

    /**
     * 获取用户收货地址
     * @param account
     * @return
     */
    ReceivAddressVo getAddress(String account);

    /**
     * 用户获取 “修改手机号码” 验证码
     * @param mobile
     * @param account
     */
    void sendVerificationCodeForChangeMobile(String mobile, String account);

    /**
     * 更新登录密码（登录中）
     * @param account
     * @param oldPassword
     * @param password
     * @param repassword
     */
    void updatePasswordInLogin(String account, String oldPassword, String password, String repassword);


    /**
     * 修改手机号
     * @param mobile
     * @param code
     */
    void updateMobile(String account, String mobile, String code);

    /**
     * 发送 “忘记支付密码 ” 验证码
     * @param mobile
     * @param account
     */
    void sendVerificationCodeForPayPwd(String mobile, String account);

    /**
     * 更新支付密码（记得支付密码）
     * @param account
     * @param oldPassword
     * @param password
     * @param repassword
     */
    void updatePayPassword(String account, String oldPassword, String password, String repassword);

    /**
     * 更新支付密码（忘记支付密码）
     * @param account
     * @param password
     * @param repassword
     */
    void updatePayPassword(String account, String password, String repassword);

    /**
     * 校验 修改支付密码 时的短信验证码
     * @param mobile
     * @param account
     * @param code
     */
    void checkVerificationCodeOfPayPwd(String mobile, String account, String code);

    /**
     * 关于我们
     * @return
     */
    SpecialVo aboutUs();

    /**
     * 获取我的团队
     * @param account
     * @return
     */
    FriendsVo myTeam(String account);

    /**
     * 管理台 获取用户列表
     * @param pageSize
     * @param rows
     * @return
     */
    PageResult<List<UserEntity>> selectByRowBounds(String account,String realName,Integer black, Integer pageSize, Integer rows,Integer grade);

    /**
     * 管理台  拉黑或者拉白 用户
     * @param userId
     */
    void takeBlack(Integer userId);

    /**
     * 管理台 设置pzsh
     * @param pzsh
     */
    void setPzsh(Integer pzsh);

    /**
     * 管理台 设置矿工费
     * @param miner
     */
    void setMiner(String miner);

    /**
     * 管理台 设置 关于我们
     * @param about
     */
    void setAboutsUs(String about);

    /**
     * 管理台 获取矿工费
     * @return
     */
    String getMiner();

    /**
     * 管理台 获取pzsh
     * @return
     */
    String getPzsh();

    /**
     * 管理台 获取关于我们
     * @return
     */
    String getAboutsUs();

    /**
     * 获取用户收益情况
     * @return
     * @param account
     */
    UserProfitVo getProfit(String account);

    /**
     * 管理台 获取手续费
     * @return
     */
    String getRD2PS();

    /**管理台 设置手续费
     *
     * @param rd2ps
     */
    void setRD2PS(Integer rd2ps);

    /**
     * 禁止调用此服务，只用于初始化用户
     * @param account
     * @param mobile
     * @param pass
     * @param visitAccount
     */
    void registry_initUser(String account, String mobile, String pass, String visitAccount);

    /**
     * 发放ps给用户
     * @param account
     * @param iii
     */
    void addUserPS(String account, Integer iii);

    /**
     * 获取用户总数
     * @return
     */
    int getUserCount();

    /**
     * 改变用户星级
     */
    void toGrade(String account, Integer grade);

    /**
     * 每天5点，开始初始化用户第二日的收益总数记录...
     */
    void initUserProfitToday();

    /**
     * 获取升级
     * @return
     */
    String getLevelRule();

    /**
     * 设置升级规则
     * @param levelRule
     */
    void setLevelRule(String levelRule);

    /**
     * RD 收益记录
     * @return
     */
    JSONObject getRdRecord(String account, String page);

    /**
     *
     */
    void registry_initUser1();

    /**
     * 获取用户直推人数和团队人数
     * @param account
     * @return
     */
    RTVo getRecommedAndTeam(String account);

    /**
     * 用户白名单
     * @param userId
     */
    void whiteUser(Integer userId);

    /**
     * 获取直推奖励
     * @return
     */
    String getRewardPs();

    /**
     * 设置直推奖励
     * @param iii
     */
    void setRewardPs(String iii);
}
